_require       "./General.smi"
_require       "./IntInf.smi"
_require local "./SMLSharp_ScanChar.smi"
_require local "./String.smi"
_require       "./StringCvt.smi"
_use local     "./Word_common.sml"

structure Word64 =
struct
  val wordSize : int
  val toLarge : word64 -> word64
  val toLargeX : word64 -> word64
  val toLargeWord = toLarge
  val toLargeWordX = toLargeX
  val fromLarge : word64 -> word64
  val fromLargeWord = fromLarge
  val toLargeInt : word64 -> largeInt
  val toLargeIntX : word64 -> largeInt
  val fromLargeInt : LargeInt.int -> word64
  val toInt = SMLSharp_Builtin.Word64.toInt32
  val toIntX = SMLSharp_Builtin.Word64.toInt32X
  val fromInt = SMLSharp_Builtin.Word64.fromInt32
  val andb = SMLSharp_Builtin.Word64.andb
  val orb = SMLSharp_Builtin.Word64.orb
  val xorb = SMLSharp_Builtin.Word64.xorb
  val notb = SMLSharp_Builtin.Word64.notb
  val << = SMLSharp_Builtin.Word64.lshift
  val >> = SMLSharp_Builtin.Word64.rshift
  val ~>> = SMLSharp_Builtin.Word64.arshift
  val + = SMLSharp_Builtin.Word64.add
  val - = SMLSharp_Builtin.Word64.sub
  val * = SMLSharp_Builtin.Word64.mul
  val div = SMLSharp_Builtin.Word64.div
  val mod = SMLSharp_Builtin.Word64.mod
  val compare : word64 * word64 -> General.order
  val < = SMLSharp_Builtin.Word64.lt
  val <= = SMLSharp_Builtin.Word64.lteq
  val > = SMLSharp_Builtin.Word64.gt
  val >= = SMLSharp_Builtin.Word64.gteq
  val ~ = SMLSharp_Builtin.Word64.neg
  val min : word64 * word64 -> word64
  val max : word64 * word64 -> word64
  val fmt : StringCvt.radix -> word64 -> string
  val toString : word64 -> string
  val scan : StringCvt.radix
             -> (char, 'a) StringCvt.reader
             -> (word64, 'a) StringCvt.reader
  val fromString : string -> word64 option
  type word = word64
end

structure LargeWord = Word64
